﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using Biblioteca.Utils;
using Biblioteca.DataBase;
using Pms.Utils;
using SERIX.Util;
using System.Data.Common;

namespace SERIX
{

    public class CriteriosPesquisaEscritorio : CriteriosPesquisa
    {
        public string FiltroTerritorio { get; set; }
        public Boolean FiltroSomenteAtivo { get; set; }
        public string FiltroUnidReg { get; set; }
        public string MestreUnidReg { get; set; }
    }

    public partial class EscritoriosLocais : Seguranca
    {

        string _idt_uni_reg = "";
        string _filtro = "";

        CriteriosPesquisaEscritorio criteriosPesquisa;

        protected void Page_Load(object sender, EventArgs e)
        {
            base.OnLoad(e);
            btnNovo.Enabled = PermissaoManut.Equals(Constantes.PERM_MANUTENCAO);
            InicializarCriteriosPesquisa();

            if (Request["idt_uni_reg"] != null)
            {
                _idt_uni_reg = Server.UrlDecode(Criptografia.Descriptografar(Request["idt_uni_reg"]));
                _filtro = "&idt_uni_reg=" +  Server.UrlEncode(Request["idt_uni_reg"]);
            }
            else if (criteriosPesquisa != null && !string.IsNullOrEmpty(criteriosPesquisa.MestreUnidReg))
            {
                _idt_uni_reg = criteriosPesquisa.MestreUnidReg;
                _filtro = "&idt_uni_reg=" + Server.UrlEncode(Criptografia.Criptografar(_idt_uni_reg));
            }

            if (!RestaurarPesquisa() && !Page.IsPostBack)
            {
                SalvarPesquisa();
                Navegador1.CarregueBotoes(0);
                Pesquisar();
            }
            else if (!string.IsNullOrEmpty(_idt_uni_reg))
            {
                SalvarPesquisa();
            }
            
            Navegador1.Pesquisar += new SERIX.Controles.Navegador.PesquisarDelegate(Pesquisar);
            txtFiltrar.Focus();
            if (!Page.IsPostBack)
            {
                BiblioSERIX.PreencherDdl(ref ddlUnidadeRegional, CUnidadesRegionais.ObterTodos(UsuAut.Login), "NOME_UNI_REG", "IDT_UNI_REG");
            }
         }

        private void InicializarCriteriosPesquisa()
        {
            criteriosPesquisa = (CriteriosPesquisaEscritorio)Session[Page.ToString()];
        }

        private void SalvarPesquisa()
        {
            if (criteriosPesquisa == null)
            {
                criteriosPesquisa = new CriteriosPesquisaEscritorio() { FiltroSimples = txtFiltrar.Text, PaginaAtual = 1, MestreUnidReg = _idt_uni_reg };
                Session[Page.ToString()] = criteriosPesquisa;
            }
            else
            {
                criteriosPesquisa.FiltroSimples = txtFiltrar.Text;                
                criteriosPesquisa.FiltroUnidReg = ddlUnidadeRegional.SelectedValue;
                criteriosPesquisa.MestreUnidReg = _idt_uni_reg;
            }
        }

        private bool RestaurarPesquisa()
        {
            if (!IsPostBack && criteriosPesquisa != null)
            {
                if (string.IsNullOrEmpty(_idt_uni_reg) && !string.IsNullOrEmpty(criteriosPesquisa.MestreUnidReg))
                {
                    _idt_uni_reg = criteriosPesquisa.MestreUnidReg;
                    _filtro = "&idt_uni_reg=" + Server.UrlEncode(Criptografia.Criptografar(criteriosPesquisa.MestreUnidReg));
                }
                else if (!string.IsNullOrEmpty(criteriosPesquisa.MestreUnidReg) && _idt_uni_reg != criteriosPesquisa.MestreUnidReg)
                {
                    criteriosPesquisa.PaginaAtual = 1;
                    criteriosPesquisa.FiltroSimples = "";
                    criteriosPesquisa.FiltroTerritorio = "";
                    criteriosPesquisa.MestreUnidReg = "";
                    criteriosPesquisa.FiltroUnidReg = "";
                    criteriosPesquisa.FiltroSomenteAtivo = false;

                }
                
                //ddlUnidadeRegional.Items.Clear();
                
                ddlUnidadeRegional.SelectedValue = criteriosPesquisa.FiltroUnidReg;
                txtFiltrar.Text = criteriosPesquisa.FiltroSimples;                
                Pesquisar();
                return true;
            }

            return false;
        }

        protected void Todos()
        {   
            //ddlUnidadeRegional.SelectedIndex = -1;
            //ddlUnidadeRegional.Items.Clear();            
            lblFiltro.Text = "Filtro:";
            txtFiltrar.Text = "";
            string filtro = MestreDetalhe( "where");
            string SQL = @" select idt_esloc, idt_uni_reg, dsc_esloc  from  Serix.SRX_ESCRITORIOS_LOCAIS " + filtro + " order by DSC_ESLOC ";
            QueryPaginada qy = null;
            try
            {
                qy = new QueryPaginada(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, UsuAut.Login, BiblioPMS.Demo), SQL, BiblioSERIX.tamPag);
                gridView.DataSource = qy.Executar(criteriosPesquisa.PaginaAtual);
                gridView.DataBind();
                Navegador1.CarregueBotoes(qy.QtdLinhas());

            }
            catch
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
            }
            finally
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
            }
        }

        /// <summary>
        /// Método que trata o recebimento do parametro do mestre
        /// </summary>
        /// <returns></returns>
        private string MestreDetalhe( string tag)
        {
            string filtro = "";
            if (!string.IsNullOrEmpty(_idt_uni_reg))
            {
                filtro = " " + tag + " idt_uni_reg = " + criteriosPesquisa.MestreUnidReg;
                tdMestre.Visible = true;
                CUnidadesRegionais mestre = CUnidadesRegionais.PesquisaporCodigo(_idt_uni_reg, UsuAut.Login);
                lbMestreU.Text = mestre.Nome_uni_reg;               
                lblUnidadeRegional.Visible = false;
                ddlUnidadeRegional.Visible = false;
            }
            else
            {
                tdMestre.Visible = false;
            };
            return filtro;
        }

        protected void Pesquisar()
        {
            
            QueryPaginada qy = null;          
            
            try
            {
                //Se o filtro nao estiver vazio 
                if (txtFiltrar.Text != "" || !String.IsNullOrEmpty(_idt_uni_reg) || ddlUnidadeRegional.SelectedIndex > 0 )
                {
                    Session["PagAtual"] = 1;
                    string filtro = "";
                    string dsc_filtro = "";

                    filtro = MestreDetalhe( "and");
                    //Filtros

                    if (ddlUnidadeRegional.SelectedIndex > 0)
                    {
                        dsc_filtro = " Unidade Regional = \"" + ddlUnidadeRegional.SelectedItem + "\"";
                        filtro = " and idt_uni_reg = :idt_unid_reg ";
                    }

                    if (txtFiltrar.Text != "")
                    {
                        dsc_filtro =  dsc_filtro + " Descrição = \"" + txtFiltrar.Text + "\"";
                    }
                   

                    lblFiltro.Text = "Filtro:" + dsc_filtro;

                    string SQL = @" SELECT idt_esloc, idt_uni_reg, dsc_esloc 
                                      FROM Serix.SRX_ESCRITORIOS_LOCAIS  T 
                                      WHERE UPPER(T.DSC_ESLOC) LIKE '%' || UPPER(:DSC_ESLOC) || '%'" +
                                      filtro + " order by DSC_ESLOC";
                    try
                    {
                        qy = new QueryPaginada(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, UsuAut.Login, BiblioPMS.Demo), SQL, BiblioSERIX.tamPag);
                        qy.AdicionarParametro("DSC_ESLOC", DbType.String, txtFiltrar.Text);
                        if (ddlUnidadeRegional.SelectedIndex > 0)
                        {
                            qy.AdicionarParametro("idt_unid_reg", DbType.Int32, ddlUnidadeRegional.SelectedValue);
                        }

                        gridView.DataSource = qy.Executar(criteriosPesquisa.PaginaAtual);
                        gridView.DataBind();
                        Navegador1.CarregueBotoes(qy.QtdLinhas());
                    }
                    catch
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                        Todos();
                    }
                    finally
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                    }
                }
                else
                    //Caso o filtro esteja vazio, mostre todos
                    Todos();
            }
            catch
            //Em caso de erro, mostra todos as unidades
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
                Todos();
            }
        }


        protected void btnNovo_Click(object sender, EventArgs e)
        {
            Response.Redirect("EscritoriosLocaisManut.aspx?OP=I"+_filtro);
        }

        protected void btnPequisar_Click(object sender, EventArgs e)
        {
            criteriosPesquisa.PaginaAtual = 1;
            Pesquisar();
            SalvarPesquisa();
            
        }

        protected void btnTodos_Click(object sender, EventArgs e)
        {
            criteriosPesquisa.PaginaAtual = 1;
            Todos();
            SalvarPesquisa();
        }

        protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                string IDT_ESLOC = ((DbDataRecord)e.Row.DataItem)["IDT_ESLOC"].ToString();
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 4].Controls[1]).NavigateUrl = "EscritoriosLocaisManut.aspx?OP=R&idt_esloc=" + Server.UrlEncode(Criptografia.Criptografar(IDT_ESLOC)) +_filtro;
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 3].Controls[1]).NavigateUrl = "EscritoriosLocaisManut.aspx?OP=U&idt_esloc=" + Server.UrlEncode(Criptografia.Criptografar(IDT_ESLOC)) +_filtro;
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 2].Controls[1]).NavigateUrl = "EscritoriosLocaisManut.aspx?OP=DATANASC_CONJUGE&idt_esloc=" + Server.UrlEncode(Criptografia.Criptografar(IDT_ESLOC)) +_filtro;
                ((DropDownList)e.Row.Cells[gridView.Columns.Count - 1].Controls[1]).Attributes.Add("chave", Server.UrlEncode(Criptografia.Criptografar(IDT_ESLOC)));
                //SEGURANÇA
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 4].Controls[1]).Enabled = !PermissaoManut.Equals(Constantes.PERM_NEGADA);
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 3].Controls[1]).Enabled = PermissaoManut.Equals(Constantes.PERM_MANUTENCAO);
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 2].Controls[1]).Enabled = PermissaoManut.Equals(Constantes.PERM_MANUTENCAO);
            }
        }

        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            string chave = ((DropDownList)sender).Attributes["chave"];
            if (((DropDownList)sender).SelectedIndex == 1)
            {
                Response.Redirect("Municipios.aspx?idt_esloc=" + chave);
            }
            else if (((DropDownList)sender).SelectedIndex == 2)
            {
                Response.Redirect("UsuariosEscritorios.aspx?idt_esloc=" + chave);
            }
        }

        

        protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
        {
            criteriosPesquisa.MestreUnidReg = "";
            Session[Page.ToString()] = criteriosPesquisa;
            Response.Redirect("~/EscritoriosLocais.aspx");
        }


    }
}
